from strategy.StrategyTemplate import StrategyTemplate
from strategy import strategy_filter
from utils.db import DbHandler
from strategy.pro_strategy.pro_strategy_common import minipremium_column

class MiniLowPremium(StrategyTemplate):
    """
    小盘低溢价转债策略
        小盘指的是剩余市值小(剩余市值=剩余规模*转债价格),低溢价保持进攻性

    筛选方法:

        1. 排除已经公告强赎的,排除正股st的,远离垃圾股、远离已公告强赎债
        2. 剩余年限大于等于1年,给实施强赎留有充分的时间
        3. 转债剩余市值小于等于501
        4. 按溢价率从低到高取前10名
    展示总数: 10
    """
    def __init__(self):
        super(self.__class__, self).__init__()
        self.strategy_name = "启四小盘低溢价转债策略"
        self.strategy_descrption = "按涨幅排序"

    def run(self):
        # 基础过滤，过滤掉新债、强赎、EB
        self.data = strategy_filter.filter_base(self.data)
        self.data = strategy_filter.filter_st_bond(self.data)

        # 到期时间大于一年
        self.data = self.data.loc[self.data['剩余年限'] >= 1.0]
        # 剩余市值小于501
        self.data = self.data.loc[self.data['剩余规模']*self.data['现价'] <= 501]
        self.data = self.data.sort_values(by='溢价率', ascending=True)

        self.data = self.data[['转债名称', '转债代码', '现价', '涨跌幅', '溢价率', '转股价值',
                               '剩余年限', '剩余规模', '行业', '正股波动率', '基金持仓']]

    def api(self, size=10):
        db = DbHandler()
        db.create_session()
        super(self.__class__, self).api(db=db)


        self.data = strategy_filter.filter_st_bond(self.data)
        self.data = strategy_filter.filter_new_bond(self.data)

        # 到期时间大于一年
        self.data = self.data.loc[self.data['year_left'] >= 1.0]
        # 剩余市值小于501
        self.data = self.data.loc[self.data['curr_iss_amt'] * self.data['price'] <= 501]
        self.data = self.data.sort_values(by='premium_rt', ascending=True)
        self.data['fund_rt'] = self.data['fund_rt'].fillna(0)

        pd_bond_data = self.data[minipremium_column]
        self.db.close_session()
        return pd_bond_data
if __name__ == '__main__':
    ins = MiniLowPremium()
    ins.topN = 20
    ins.test()

